class NotesController < ApplicationController
  
  def index
    #выбираем все записи без туду
    array_of_notes = current_user.notes.group_by {|note| note.just_note?}
    #@list_of_notes =  array_of_notes[false]
    @list =  array_of_notes[true].sort_by{|note| note.position}.reverse
    #@list_of_notes = @list_of_notes.flatten!.sort_by{|note| note.position}.reverse
    #@list_of_notes <<  array_of_notes[true]
    #@list_of_notes.flatten!
    #выдается в обратном порядке чтоб каждый новый элемент 
    #оказывался наверху списка и избежать при этом пересортировки всего списка заметок по position
    # по ому же в order тоже реверс
  end
  
  def new
    @note = Note.new(:created_at => Time.now.to_formatted_s(:db))
  end
  
  def show
    puts params.inspect
    if request.xhr?
      render :update do |page|
        page["note_#{params[:id].to_i}"].replace :partial => 'note_item', :object => Note.find(params[:id].to_i)
      end 
    else
      render :partial => 'note_item', :object => Note.find(params[:id].to_i)
    end
    # метод присутствует для поддержки всех методов РЕСТ возможно некоторые клиенты будут использовать вызовы этого метода
    # для других клиентов (не браузеров или rss readers) хорошо бы написать другие respod_to
    # возможно понадобиться написать более развернутое представление для заметки тогда надо написать новый партиал
  end
  
  def edit
    puts params.inspect
    if Note.find(params[:id].to_i)
      @note = Note.find(params[:id].to_i)
      render :update do |page|
        page[@note].replace :partial => 'edit', :object => @note
      end
    end
  end
  
  def create
    puts params.inspect
    if request.post?
      options = params[:note]
      options[:user_id] = current_user.id
      note_with_max_position = current_user.notes.nil? ? 0 : current_user.notes.max{|a, b| a.position <=> b.position}
      options[:position] = note_with_max_position.position + 1
      puts options[:position]
      @note = Note.create(options)
      if request.xhr?
        render :update do |page|
          page[:new_input_string].value = ''
          page.insert_html :top, 'notes_list', :partial => 'note_item', :object => @note
          page[@note].visual_effect :highlight, :startcolor => '#55FF55', :endcolor => '#FFFFFF'
        end
      else
        redirect_to :action => :index
      end
      
    end
  end
  
  def update
puts params.inspect
    if request.put?
      @note = Note.update(params[:id].to_i, params[:note])
      if params[:todo] && !@note.todo.nil?
        todo = @note.todo
        todo.done = params[:todo][:done]
puts todo.inspect
        todo.save!
      end
      if request.xhr?
        render :update do |page|
          page[@note].replace :partial => 'note_item', :object => @note
        end
      end
    end
  end
  
  def destroy
puts "params in destroy"
puts params.inspect
    if request.delete?
      if Note.find(params[:id].to_i)
        @note = Note.destroy(params[:id].to_i)
        if request.xhr?
          render :update do |page|
            page[@note].visual_effect :highlight, :startcolor => '#FF9999', :endcolor => '#FF0000'
            page.delay(0.5) do
              page[@note].remove
            end
          end
        end
      else
        flash[:notes_errors] = 'такой записи не существует'
        logger.error('Попытка удаление несуществующей заметки')
        # разобраться с работой логера 
        # использовать в других методах
      end
    end
    redirect_to :action => :index unless request.xhr?
  end
  
  def order
puts "======================================================="
puts params.inspect
    notes_list = params[:notes_list]
    notes_list.reverse.each_with_index do |id, idx|
      Note.update(id, :position => idx)
    end
    render :text => "Остортировано"
  end
end
